<?php
class Validations_addendum {
	
	/**
	 * Variavel de sessão
	 * */
	private $session;
	/**
	 * Instancia do annotation
	 * */
	private $r;
	/**
	 * Mantem informações de session do usuário
	 * */
	private $user_login;
	
	/**
	 * Classe construtora
	 * */
	public function __construct($session, $class, $method) {
		$this->session = $session;
		$this->r = new ReflectionAnnotatedMethod($class, $method);
		$this->user_login = $this->session->userdata;
	}
	
	/**
	 * Verifica permissões de usuário
	 * */
	public function authorize(){
		$is_authorized = true;
		if ($this->r->hasAnnotation('Authorize')){
			if(Auth::is_auth($this->session)){
				$auth = $this->r->getAnnotation('Authorize');
				if (sizeof($auth->value) > 0) {
					foreach ($auth->value as $perm) {
						if (Auth::has_permission($this->session, $perm)) {
							$is_authorized = true;
							break;
						}
						else {
							$this->_redirect(url(URL_DEFAULT_LOGGED));
							break;
						}
					}
				}
				
			}
			else
				$is_authorized = false;
			
			if($is_authorized) {
				if(empty($this->user_login['user_create_team']) || empty($this->user_login['user_create_players'])) {
					//Validação para verificar se o usuário ja criou o time.
					if(empty($this->user_login['user_create_team']) && $this->r->class != "CreateTeamController")
						$this->_redirect(url('create-team'));
					//Valida se o usuário ja criou os jogadores
					elseif(empty($this->user_login['user_create_players']) && !empty($this->user_login['user_create_team']) && $this->r->class != "CreatePlayerController")
						$this->_redirect(url('create-player'));
				}
				else {
					//Caso ja tenha criado o time e criado os jogadores é enviado apra profile	
					if($this->r->class == "CreateTeamController" || $this->r->class == "CreatePlayerController")
						$this->_redirect(url(URL_DEFAULT_LOGGED));
				}
			}
		}
	
		//Caso não tenha a autorização para continuar é enviado para login
		if(!$is_authorized)
			$this->_redirect(url(URL_DEFAULT_LOGIN));
	}
	
	// === PRIVATES ===
	/**
	 * Redireciona para URL
	 * */
	private function _redirect($url){
		redirect($url);
	}
}